// /**
// *      author: Y_Yao
// *      created: 2024-10-14 21:46:06
// **/

// #include<bits/stdc++.h>

// using namespace std;
// using LL = long long;
// const LL LLINF = 1e18;
// const int INF = 0x3f3f3f3f;

// struct node
// {
//     LL a,b;
//     node(LL _a,LL _b)
//     {
//         a = _a;
//         b = _b;
//     }
//     // bool operator>(const node& n2) const
//     // {
//     //     return a == n2.a ? b > n2.b : a > n2.a;
//     // }

//     // bool operator<(const node& n2) const
//     // {
//     //     return a == n2.a ? b < n2.b : a < n2.a;
//     // }

//     bool operator<(const node& n2) const
//     {
//         return a + b < n2.a + n2.b;
//     }
    
// };

// priority_queue<node> heap;

// int main()
// {
//     ios::sync_with_stdio(false);
//     cin.tie(0);

//     LL n,m,q,u,v,t;
//     cin >> n >> m >> q >> u >> v >> t;
//     LL in = 0;
//     for(int i = 0;i < n;i++)
//     {
//         cin >> in;
//         node n(in,0);
//         heap.push(n);
//     }

//     LL nt = 1;
//     for(nt = 1;nt <= m;nt++)
//     {
//         auto tmp = heap.top();
//         heap.pop();
//         LL a = tmp.a,b = tmp.b;
//         a = a + (b + nt - 1) * q;

//         if(nt % t == 0)
//         cout << a << " ";

//         LL in1 = a * u / v;
//         LL in2 = a - in1;

//         node newnode1(in1,-nt);
//         node newnode2(in2,-nt);

//         heap.push(newnode1);
//         heap.push(newnode2);

//     }
//     cout << endl;

//     LL k = 1;
//     while(!heap.empty())
//     {
//         auto tmp = heap.top();
//         heap.pop();
//         LL a = tmp.a,b = tmp.b;
//         LL out = a + (b + nt - 1) * q;

//         if(k % t == 0)
//         cout << out << " ";

//         k++;
//     }
//     cout << endl;
//     return 0;
// }


#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,q,u,v,t,a[7500000],ans[7500000],s=0,y=0,tot=0;//一定要开long long 中间有过程量是爆int的
queue<ll> q1,q2,q3;
ll getmax(){                              //求三个队列中队首元素的最大值
	int x1=-(1<<30),x2=x1,x3=x1;
	if(!q1.empty())x1=q1.front();
	if(!q2.empty())x2=q2.front();
	if(!q3.empty())x3=q3.front();
	if(x1>=x2&&x1>=x3){q1.pop();return x1;}
	else if(x2>=x1&&x2>=x3){q2.pop();return x2;}
	q3.pop();return x3;
}
void put(ll x1,ll x2){                    //压入两条新蚯蚓
	if(x1<x2){int z=x1;x1=x2;x2=z;}
	q2.push(x1),q3.push(x2);
	return;
}
bool cmp(ll x,ll y){
	return x>y;
}
inline ll read(){
	char ch=getchar();ll j=0,k=1;
	while(ch<'0'||ch>'9'){if(ch=='-')k=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')j=j*10+ch-'0',ch=getchar();
	return j*k;
}
inline void write(ll x){
	if(x<0)putchar('-'),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+'0');
	return;
}
int main(){
	n=read(),m=read(),q=read(),u=read(),v=read(),t=read();
	for(ll i=1;i<=n;i++)a[i]=read();
	sort(a+1,a+n+1,cmp);
	for(ll i=1;i<=n;i++)q1.push(a[i]);    //保证q1单调递减
	for(ll i=1;i<=m;i++){
		ans[i]=getmax()+y;
		int j=ans[i]*u/v,k=ans[i]-j;
		y+=q;
		put(j-y,k-y);
	}
	while(!q1.empty()||!q2.empty()||!q3.empty())a[++tot]=getmax()+y;//最后剩下的蚯蚓按降序存储
	for(int i=t;i<=m;i+=t)write(ans[i]),putchar(' ');
	putchar('\n');
	for(int i=t;i<=tot;i+=t)write(a[i]),putchar(' ');
	putchar('\n');
	return 0;
}